const api = require("../../../config/api");

// pages/MyList/Buy/Buy.js
Page({

    /**
     * 页面的初始数据
     */
    data: {

        // 工单编号
        work: '',
        // 当前点击的附件
        selectItem: '',
        // 总价
        totalPrice: '',
        // 存放附件种类
        AccessoryList: [],
        // 存放该种类所有的附件
        Accessory: [],
        // 数组元素类型是对象，对象属性包含附件名称，附件单价，附件数量
        SelectAccessory: [],
        // 为了跳转后自动显示第一个附件分类的附件
        firstCode: '',
        // 当前点击的附件分类编号
        accessoryClassCode: '',
        // 当前点击的附件分类名称
        accessoryClassName: '',
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        // 从上传检测结果页面跳转，传递工单号
        const orderCode = options.workOrder;
        this.setData({
            work: orderCode
        });
        console.log('在Buy页面传过来的工单号', this.data.work)
        this.fetchAllAccessory();
        this.getTotalPrice();
    },

    // 向后台请求所有附件的种类
    fetchAllAccessory: function(){
        // 跳转到附件采购页面时，刷新左侧附件种类栏
        wx.request({
          url: api.class,
          method: 'POST',
          data:{},
          success: (res) => {
            if(res.data.code == 200){
                this.setData({
                    AccessoryList: res.data.data,
                    firstCode: res.data.data[0].accessoryClassCode // 取得第一个附件分类编号
                });
                console.log('AccessoryList的内容', this.data.AccessoryList)
                // 自动显示第一个附件分类中的附件
                this.doShowAccessory(
                    { currentTarget: { dataset: { index: 0, code: this.data.firstCode } } }
                    );
            }   
          },
          fail(){
              wx.showToast({
                title: '刷新失败',
                icon: 'none'
              })
          }

        })
    },

    

    // 向后台请求该附件分类所拥有的附件
    doShowAccessory: function(e){
        // 获取当前附件分类的下标
        const index = e.currentTarget.dataset.index;
        // 获取当前附件分类的所有信息
        const accessoryClass = this.data.AccessoryList[index];
        // 更新数据
        this.setData({
            accessoryClassCode: accessoryClass.accessoryClassCode,
            accessoryClassName: accessoryClass.accessoryClassName,
        })
        // console.log('当前附件分类', acaccessoryClass)
        // console.log('accessoryClassCode值：', accessoryClassCode)
        // console.log('当前附件的index下标为', index)
        // 向后台发送请求
        wx.request({
          url: api.query,
          method: 'POST',
          data:{
            accessoryClassCode: this.data.accessoryClassCode
          },
          success: (res) => {
            // 点击不同的附件分类先需要清空Accessory数组中之前获得的附件
            this.setData({
                Accessory: ''
            });
            // console.log('点击不同的附件分类后，Accessory的值', this.data.Accessory)
            // 更新附件数组的信息
            // console.log('获取附件数据成功', res.data.data);  // 查看返回的数据
            if(res.data.code == 200){
                this.setData({
                    Accessory: res.data.data,
                    // 当前选择的附件分类的编号
                    selectItem: this.data.accessoryClassCode,
                });
                // 给Accessory的每个对象添加quantity属性，初始值为 0
                const updatedAccessoryList = this.data.Accessory.map(item => ({
                    ...item,  // 保留原有的属性
                    quantity: 0  // 添加新属性附件购买数量 quantity，初始值为 0
                }));
                // 更新Accessory的内容
                this.setData({
                    Accessory: updatedAccessoryList
                });
                // console.log('获取的Accessory', this.data.Accessory);  // 查看返回的数据
                // console.log('----分界线----')
            }else{
                wx.showToast({
                  title: res.data.mesage,
                  icon: 'none'
                })
            }
          },
          fail(){
              wx.showToast({
                title: '请求附件失败',
                icon: 'none',
              });
          },
        })
    },

    // 添加附件
    increaseQuantity: function(e){
        const index = e.currentTarget.dataset.itemindex;

        // console.log('点击的附件下标', index)
        // 根据获取的下标，来创建一个对象，并定义对象的属性    
        const accessory = this.data.Accessory[index];
        const accessoryName = accessory.accessoryName;
        const accessoryCode = accessory.accessoryCode;
        const accessoryPrice = accessory.accessoryPrice;
        console.log('获取(点击)的附件对象', accessory)
        // console.log('增加的附件名称', accessoryName)
        // 检查SelectAccessory数组中是否已存在该附件
        const existingAccessoryIndex = this.data.SelectAccessory.findIndex(item => item.accessoryName === accessoryName);
        // 若该附件已经存在于数组之中
        if(existingAccessoryIndex !== -1){
            // 创建一个新的数组存放原始数组
            const newSelectAccessory = [...this.data.SelectAccessory];
            // console.log('新建的数组内容', newSelectAccessory)
            // 找到该附件的下标，并把附件的数量+1
            newSelectAccessory[existingAccessoryIndex].testingAccessoryNumber += 1;
            this.setData({
                SelectAccessory: newSelectAccessory
            });
        }else{
            // 如果第一次购买该附件，则创建一个对象，并把该对象添加到SelectAccessory数组中
            const newAccessory = {
                accessoryClassCode: this.data.accessoryClassCode,
                accessoryClassName: this.data.accessoryClassName,
                accessoryName: accessoryName,
                accessoryCode: accessoryCode,
                accessoryPrice: accessoryPrice,
                testingAccessoryNumber: 1  // 初始购买数量为 1
            };
            this.setData({
                SelectAccessory: [...this.data.SelectAccessory, newAccessory]
            });
            console.log('添加附件后，SelectAccessory数组内容', this.data.SelectAccessory)
        }
        const updatedAccessory = this.data.Accessory.map(item => {
            const correspondingSelectItem = this.data.SelectAccessory.find(selectItem => selectItem.accessoryName === item.accessoryName);
            if (correspondingSelectItem) {
                // 更新 Accessory 中的数量
                item.quantity = correspondingSelectItem.testingAccessoryNumber;
            }
            return item;
        });
        
            // 更新 Accessory 数组
            this.setData({
                Accessory: updatedAccessory
            });
            
        // 计算总金额
        this.getTotalPrice();
    },

    // 删除附件
    decreaseQuantity: function(e){
        const index = e.currentTarget.dataset.itemindex;  // 获取点击附件的下标
        const accessory = this.data.Accessory[index];     // 获取当前附件的数据
        const accessoryName = accessory.accessoryName; 
        console.log('获取的附件对象', accessory)
        console.log('删除的附件名称', accessoryName)

        // 检查 SelectAccessory 中是否已存在该附件
        const existingAccessoryIndex = this.data.SelectAccessory.findIndex(item => item.accessoryName === accessoryName);

        if (existingAccessoryIndex !== -1) {
            // 如果已存在，减少该附件的数量
            const newSelectAccessory = [...this.data.SelectAccessory];
            // console.log('传递的原始数组内容', newSelectAccessory)
            if (newSelectAccessory[existingAccessoryIndex].testingAccessoryNumber > 1) {
                newSelectAccessory[existingAccessoryIndex].testingAccessoryNumber -= 1;
            } else {
                // 如果数量为 1，删除该附件
                newSelectAccessory.splice(existingAccessoryIndex, 1);
            }
            this.setData({
                SelectAccessory: newSelectAccessory
            });
            console.log('减少附件后，SelectAccessory数组内容', this.data.SelectAccessory)
        }
        const updatedAccessory = this.data.Accessory.map(item => {
            const correspondingSelectItem = this.data.SelectAccessory.find(selectItem => selectItem.accessoryName === item.accessoryName);
            if (correspondingSelectItem) {
                // 更新 Accessory 中的数量
                item.quantity = correspondingSelectItem.testingAccessoryNumber;
            }else{
                item.quantity = 0;
            }
            return item;
        });
    
        // 更新 Accessory 数组
        this.setData({
            Accessory: updatedAccessory
        });
        // 计算总金额
        this.getTotalPrice();
    },

    // 在执行任何一次增加或删除附件的操作后，都需要更新总金额
    getTotalPrice: function(){
        // 暂存中间金额
        var temp = 0;
        // 定义变量去遍历SelectAccessory数组
        for(var i = 0; i < this.data.SelectAccessory.length; i++){
            // 将某个对象的数据赋值
            const accessory = this.data.SelectAccessory[i];
            temp += accessory.accessoryPrice * accessory.testingAccessoryNumber;
        }
        // 遍历完数组后，便得到总金额，更新totalPrice
        this.setData({
            totalPrice: temp.toFixed(2)
        });
        // console.log('总金额为(保留小数点后两位)', this.data.totalPrice)
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        this.fetchAllAccessory();
        this.getTotalPrice();
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {

    },

    toUpResult: function(){
        // 在点击提交按钮后，需要将当前SelectAccessory和已购附件总价传回到上传检测页面
        const SelectAccessory = JSON.stringify(this.data.SelectAccessory)
        const totalPrice = this.data.totalPrice;
        // console.log("即将发送给前一个界面的数组", this.data.SelectAccessory);
        let pages = getCurrentPages()
        //上一页面，上传检测结果页面
        let prevPage = pages[pages.length - 2]
        //直接给上传检测结果页面的data中的参数赋值
        prevPage.setData({
            selectAccessory: encodeURIComponent(SelectAccessory),
            totalPrice: totalPrice,
            workOrderCode: this.data.work, // 上一个页面工单编号用的是workOrderCode
            // work: this.data.work // 工单编号
        })
        // 返回前一页
        wx.navigateBack({
          delta: 1
        })
    },

    /**
     * 返回上一页
     */
    toBack: function(){
      wx.navigateBack();
    },
})